Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

app/src/main/java/com/geeksville/mesh/repository/radio/MockInterface.kt ui_message_list (be3f882f) Text, 15.39 KB

T8b949e/*
* Copyright (c) 2025 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

Tff7b72package T7ee787com.geeksville.mesh.repository.radio

Tff7b72import T7ee787com.geeksville.mesh.AdminProtos
Tff7b72import T7ee787com.geeksville.mesh.ChannelProtos
Tff7b72import T7ee787com.geeksville.mesh.ConfigKt
Tff7b72import T7ee787com.geeksville.mesh.ConfigProtos
Tff7b72import T7ee787com.geeksville.mesh.DataPacket
Tff7b72import T7ee787com.geeksville.mesh.MeshProtos
Tff7b72import T7ee787com.geeksville.mesh.Portnums
Tff7b72import T7ee787com.geeksville.mesh.Position
Tff7b72import T7ee787com.geeksville.mesh.TelemetryProtos
Tff7b72import T7ee787com.geeksville.mesh.android.Logging
Tff7b72import T7ee787com.geeksville.mesh.channel
Tff7b72import T7ee787com.geeksville.mesh.concurrent.handledLaunch
Tff7b72import T7ee787com.geeksville.mesh.config
Tff7b72import T7ee787com.geeksville.mesh.deviceMetadata
Tff7b72import T7ee787com.geeksville.mesh.fromRadio
Tff7b72import T7ee787com.geeksville.mesh.model.Channel
Tff7b72import T7ee787com.geeksville.mesh.model.getInitials
Tff7b72import T7ee787com.geeksville.mesh.queueStatus
Tff7b72import T7ee787com.google.protobuf.ByteString
Tff7b72import T7ee787dagger.assisted.Assisted
Tff7b72import T7ee787dagger.assisted.AssistedInject
Tff7b72import T7ee787kotlinx.coroutines.delay
Tff7b72import T7ee787kotlin.random.Random

Tff7b72private Tff7b72val Te6edf3defaultLoRaConfig Tff7b72=
Te6edf3ConfigKtTb4b4b4.Te6edf3loRaConfig Tb4b4b4{
Te6edf3usePreset Tff7b72= Tff7b72true
Te6edf3region Tff7b72= Te6edf3ConfigProtosTb4b4b4.Te6edf3ConfigTb4b4b4.Te6edf3LoRaConfigTb4b4b4.Te6edf3RegionCodeTb4b4b4.Te6edf3TW
Tb4b4b4}

Tff7b72private Tff7b72val Te6edf3defaultChannel Tff7b72= Te6edf3channel Tb4b4b4{
Te6edf3settings Tff7b72= Te6edf3ChannelTb4b4b4.Te6edf3defaultTb4b4b4.Te6edf3settings
Te6edf3role Tff7b72= Te6edf3ChannelProtosTb4b4b4.Te6edf3ChannelTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3PRIMARY
Tb4b4b4}

T8b949e/** A simulated interface that is used for testing in the simulator */
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffdetekt:TooManyFunctionsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdetekt:MagicNumberTa5d6ff"Tb4b4b4)
Tff7b72class T56d364MockInterface
Tf0883e@AssistedInject
Tff7b72constructorTb4b4b4(
Tff7b72private Tff7b72val Te6edf3serviceTb4b4b4: Te6edf3RadioInterfaceServiceTb4b4b4,
Tf0883e@Assisted Tff7b72val Te6edf3addressTb4b4b4: Tffa657StringTb4b4b4,
Tb4b4b4) Tb4b4b4: Te6edf3IRadioInterfaceTb4b4b4,
Te6edf3Logging Tb4b4b4{

Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72private Tff7b72const Tff7b72val Te6edf3MY_NODE Tff7b72= T79c0ff0Te6edf3x42424242
Tb4b4b4}

Tff7b72private Tff7b72var Te6edf3currentPacketId Tff7b72= T79c0ff5T79c0ff0

T8b949e// an infinite sequence of ints
Tff7b72private Tff7b72val Te6edf3packetIdSequence Tff7b72= Te6edf3generateSequence Tb4b4b4{ Te6edf3currentPacketIdTff7b72+Tff7b72+ Tb4b4b4}Tb4b4b4.Te6edf3iteratorTb4b4b4(Tb4b4b4)

Tff7b72init Tb4b4b4{
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffStarting the mock interfaceTa5d6ff"Tb4b4b4)
Te6edf3serviceTb4b4b4.Te6edf3onConnectTb4b4b4(Tb4b4b4) T8b949e// Tell clients they can use the API
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffhandleSendToRadioTb4b4b4(Te6edf3pTb4b4b4: Te6edf3ByteArrayTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3pr Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3ToRadioTb4b4b4.Te6edf3parseFromTb4b4b4(Te6edf3pTb4b4b4)
Te6edf3sendQueueStatusTb4b4b4(Te6edf3prTb4b4b4.Te6edf3packetTb4b4b4.Te6edf3idTb4b4b4)

Tff7b72val Te6edf3data Tff7b72= Tff7b72if Tb4b4b4(Te6edf3prTb4b4b4.Te6edf3hasPacketTb4b4b4(Tb4b4b4)Tb4b4b4) Te6edf3prTb4b4b4.Te6edf3packetTb4b4b4.Te6edf3decoded Tff7b72else Tff7b72null

Tff7b72when Tb4b4b4{
Te6edf3prTb4b4b4.Te6edf3wantConfigId Tff7b72!Tff7b72= T79c0ff0 Tff7b72-Tff7b72> Te6edf3sendConfigResponseTb4b4b4(Te6edf3prTb4b4b4.Te6edf3wantConfigIdTb4b4b4)
Te6edf3data Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3dataTb4b4b4.Te6edf3portnum Tff7b72=Tff7b72= Te6edf3PortnumsTb4b4b4.Te6edf3PortNumTb4b4b4.Te6edf3ADMIN_APP Tff7b72-Tff7b72>
Te6edf3handleAdminPacketTb4b4b4(Te6edf3prTb4b4b4, Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3parseFromTb4b4b4(Te6edf3dataTb4b4b4.Te6edf3payloadTb4b4b4)Tb4b4b4)
Te6edf3prTb4b4b4.Te6edf3hasPacketTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3prTb4b4b4.Te6edf3packetTb4b4b4.Te6edf3wantAck Tff7b72-Tff7b72> Te6edf3sendFakeAckTb4b4b4(Te6edf3prTb4b4b4)
Tff7b72else Tff7b72-Tff7b72> Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffIgnoring data sent to mock interface Tffd700$Te6edf3prTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffhandleAdminPacketTb4b4b4(Te6edf3prTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3ToRadioTb4b4b4, Te6edf3dTb4b4b4: Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4) Tb4b4b4{
Tff7b72when Tb4b4b4{
Te6edf3dTb4b4b4.Te6edf3getConfigRequest Tff7b72=Tff7b72= Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3ConfigTypeTb4b4b4.Te6edf3LORA_CONFIG Tff7b72-Tff7b72>
Te6edf3sendAdminTb4b4b4(Te6edf3prTb4b4b4.Te6edf3packetTb4b4b4.Te6edf3toTb4b4b4, Te6edf3prTb4b4b4.Te6edf3packetTb4b4b4.Te6edf3fromTb4b4b4, Te6edf3prTb4b4b4.Te6edf3packetTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{
Te6edf3getConfigResponse Tff7b72= Te6edf3config Tb4b4b4{ Te6edf3lora Tff7b72= Te6edf3defaultLoRaConfig Tb4b4b4}
Tb4b4b4}

Te6edf3dTb4b4b4.Te6edf3getChannelRequest Tff7b72!Tff7b72= T79c0ff0 Tff7b72-Tff7b72>
Te6edf3sendAdminTb4b4b4(Te6edf3prTb4b4b4.Te6edf3packetTb4b4b4.Te6edf3toTb4b4b4, Te6edf3prTb4b4b4.Te6edf3packetTb4b4b4.Te6edf3fromTb4b4b4, Te6edf3prTb4b4b4.Te6edf3packetTb4b4b4.Te6edf3idTb4b4b4) Tb4b4b4{
Te6edf3getChannelResponse Tff7b72= Te6edf3channel Tb4b4b4{
Te6edf3index Tff7b72= Te6edf3dTb4b4b4.Te6edf3getChannelRequest Tff7b72- T79c0ff1 T8b949e// 0 based on the response
Tff7b72if Tb4b4b4(Te6edf3dTb4b4b4.Te6edf3getChannelRequest Tff7b72=Tff7b72= T79c0ff1Tb4b4b4) Tb4b4b4{
Te6edf3settings Tff7b72= Te6edf3ChannelTb4b4b4.Te6edf3defaultTb4b4b4.Te6edf3settings
Te6edf3role Tff7b72= Te6edf3ChannelProtosTb4b4b4.Te6edf3ChannelTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3PRIMARY
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72else Tff7b72-Tff7b72> Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffIgnoring admin sent to mock interface Tffd700$Te6edf3dTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffcloseTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffClosing the mock interfaceTa5d6ff"Tb4b4b4)
Tb4b4b4}

T8b949e// / Generate a fake text message from a node
Tff7b72private Tff7b72fun Td2a8ffmakeTextMessageTb4b4b4(Te6edf3numInTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3FromRadioTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3packet Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3MeshPacketTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3id Tff7b72= Te6edf3packetIdSequenceTb4b4b4.Te6edf3nextTb4b4b4(Tb4b4b4)
Te6edf3from Tff7b72= Te6edf3numIn
Te6edf3to Tff7b72= T79c0ff0Te6edf3xffffffffTb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4) T8b949e// ugly way of saying broadcast
Te6edf3rxTime Tff7b72= Tb4b4b4(Te6edf3SystemTb4b4b4.Te6edf3currentTimeMillisTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Te6edf3rxSnr Tff7b72= T79c0ff1.5f
Te6edf3decoded Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3DataTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3portnum Tff7b72= Te6edf3PortnumsTb4b4b4.Te6edf3PortNumTb4b4b4.Te6edf3TEXT_MESSAGE_APP
Te6edf3payload Tff7b72= Te6edf3ByteStringTb4b4b4.Te6edf3copyFromUtf8Tb4b4b4(Ta5d6ff"Ta5d6ffThis simulated node sends Hi!Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffmakeNeighborInfoTb4b4b4(Te6edf3numInTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3FromRadioTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3packet Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3MeshPacketTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3id Tff7b72= Te6edf3packetIdSequenceTb4b4b4.Te6edf3nextTb4b4b4(Tb4b4b4)
Te6edf3from Tff7b72= Te6edf3numIn
Te6edf3to Tff7b72= T79c0ff0Te6edf3xffffffffTb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4) T8b949e// broadcast
Te6edf3rxTime Tff7b72= Tb4b4b4(Te6edf3SystemTb4b4b4.Te6edf3currentTimeMillisTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Te6edf3rxSnr Tff7b72= T79c0ff1.5f
Te6edf3decoded Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3DataTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3portnum Tff7b72= Te6edf3PortnumsTb4b4b4.Te6edf3PortNumTb4b4b4.Te6edf3NEIGHBORINFO_APP
Te6edf3payload Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3NeighborInfoTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3setNodeIdTb4b4b4(Te6edf3numInTb4b4b4)
Tb4b4b4.Te6edf3setLastSentByIdTb4b4b4(Te6edf3numInTb4b4b4)
Tb4b4b4.Te6edf3setNodeBroadcastIntervalSecsTb4b4b4(T79c0ff6T79c0ff0Tb4b4b4)
Tb4b4b4.Te6edf3addNeighborsTb4b4b4(
Te6edf3MeshProtosTb4b4b4.Te6edf3NeighborTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3setNodeIdTb4b4b4(Te6edf3numIn Tff7b72+ T79c0ff1Tb4b4b4)
Tb4b4b4.Te6edf3setSnrTb4b4b4(T79c0ff1T79c0ff0.0fTb4b4b4)
Tb4b4b4.Te6edf3setLastRxTimeTb4b4b4(Tb4b4b4(Te6edf3SystemTb4b4b4.Te6edf3currentTimeMillisTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3setNodeBroadcastIntervalSecsTb4b4b4(T79c0ff6T79c0ff0Tb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3addNeighborsTb4b4b4(
Te6edf3MeshProtosTb4b4b4.Te6edf3NeighborTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3setNodeIdTb4b4b4(Te6edf3numIn Tff7b72+ T79c0ff2Tb4b4b4)
Tb4b4b4.Te6edf3setSnrTb4b4b4(T79c0ff1T79c0ff2.0fTb4b4b4)
Tb4b4b4.Te6edf3setLastRxTimeTb4b4b4(Tb4b4b4(Te6edf3SystemTb4b4b4.Te6edf3currentTimeMillisTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3setNodeBroadcastIntervalSecsTb4b4b4(T79c0ff6T79c0ff0Tb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3toByteStringTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffmakePositionTb4b4b4(Te6edf3numInTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3FromRadioTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3packet Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3MeshPacketTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3id Tff7b72= Te6edf3packetIdSequenceTb4b4b4.Te6edf3nextTb4b4b4(Tb4b4b4)
Te6edf3from Tff7b72= Te6edf3numIn
Te6edf3to Tff7b72= T79c0ff0Te6edf3xffffffffTb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4) T8b949e// ugly way of saying broadcast
Te6edf3rxTime Tff7b72= Tb4b4b4(Te6edf3SystemTb4b4b4.Te6edf3currentTimeMillisTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Te6edf3rxSnr Tff7b72= T79c0ff1.5f
Te6edf3decoded Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3DataTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3portnum Tff7b72= Te6edf3PortnumsTb4b4b4.Te6edf3PortNumTb4b4b4.Te6edf3POSITION_APP
Te6edf3payload Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3PositionTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3setLatitudeITb4b4b4(Te6edf3PositionTb4b4b4.Te6edf3degITb4b4b4(T79c0ff3T79c0ff2.776665Tb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3setLongitudeITb4b4b4(Te6edf3PositionTb4b4b4.Te6edf3degITb4b4b4(Tff7b72-T79c0ff9T79c0ff6.796989Tb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3setAltitudeTb4b4b4(T79c0ff1T79c0ff5T79c0ff0Tb4b4b4)
Tb4b4b4.Te6edf3setTimeTb4b4b4(Tb4b4b4(Te6edf3SystemTb4b4b4.Te6edf3currentTimeMillisTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3setPrecisionBitsTb4b4b4(T79c0ff1T79c0ff5Tb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3toByteStringTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffmakeTelemetryTb4b4b4(Te6edf3numInTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3FromRadioTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3packet Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3MeshPacketTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3id Tff7b72= Te6edf3packetIdSequenceTb4b4b4.Te6edf3nextTb4b4b4(Tb4b4b4)
Te6edf3from Tff7b72= Te6edf3numIn
Te6edf3to Tff7b72= T79c0ff0Te6edf3xffffffffTb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4) T8b949e// broadcast
Te6edf3rxTime Tff7b72= Tb4b4b4(Te6edf3SystemTb4b4b4.Te6edf3currentTimeMillisTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Te6edf3rxSnr Tff7b72= T79c0ff1.5f
Te6edf3decoded Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3DataTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3portnum Tff7b72= Te6edf3PortnumsTb4b4b4.Te6edf3PortNumTb4b4b4.Te6edf3TELEMETRY_APP
Te6edf3payload Tff7b72=
Te6edf3TelemetryProtosTb4b4b4.Te6edf3TelemetryTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3setTimeTb4b4b4(Tb4b4b4(Te6edf3SystemTb4b4b4.Te6edf3currentTimeMillisTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3setDeviceMetricsTb4b4b4(
Te6edf3TelemetryProtosTb4b4b4.Te6edf3DeviceMetricsTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3setBatteryLevelTb4b4b4(T79c0ff8T79c0ff5Tb4b4b4)
Tb4b4b4.Te6edf3setVoltageTb4b4b4(T79c0ff4.1fTb4b4b4)
Tb4b4b4.Te6edf3setChannelUtilizationTb4b4b4(T79c0ff0.12fTb4b4b4)
Tb4b4b4.Te6edf3setAirUtilTxTb4b4b4(T79c0ff0.05fTb4b4b4)
Tb4b4b4.Te6edf3setUptimeSecondsTb4b4b4(T79c0ff1T79c0ff2T79c0ff3T79c0ff4T79c0ff5T79c0ff6Tb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3toByteStringTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffmakeDataPacketTb4b4b4(Te6edf3fromInTb4b4b4: Tffa657IntTb4b4b4, Te6edf3toInTb4b4b4: Tffa657IntTb4b4b4, Te6edf3dataTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3DataTb4b4b4.Te6edf3BuilderTb4b4b4) Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3FromRadioTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3packet Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3MeshPacketTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3id Tff7b72= Te6edf3packetIdSequenceTb4b4b4.Te6edf3nextTb4b4b4(Tb4b4b4)
Te6edf3from Tff7b72= Te6edf3fromIn
Te6edf3to Tff7b72= Te6edf3toIn
Te6edf3rxTime Tff7b72= Tb4b4b4(Te6edf3SystemTb4b4b4.Te6edf3currentTimeMillisTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Te6edf3rxSnr Tff7b72= T79c0ff1.5f
Te6edf3decoded Tff7b72= Te6edf3dataTb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffmakeAckTb4b4b4(Te6edf3fromInTb4b4b4: Tffa657IntTb4b4b4, Te6edf3toInTb4b4b4: Tffa657IntTb4b4b4, Te6edf3msgIdTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3makeDataPacketTb4b4b4(
Te6edf3fromInTb4b4b4,
Te6edf3toInTb4b4b4,
Te6edf3MeshProtosTb4b4b4.Te6edf3DataTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3portnum Tff7b72= Te6edf3PortnumsTb4b4b4.Te6edf3PortNumTb4b4b4.Te6edf3ROUTING_APP
Te6edf3payload Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3RoutingTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{Tb4b4b4}Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toByteStringTb4b4b4(Tb4b4b4)
Te6edf3requestId Tff7b72= Te6edf3msgId
Tb4b4b4}Tb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffsendQueueStatusTb4b4b4(Te6edf3msgIdTb4b4b4: Tffa657IntTb4b4b4) Tff7b72= Te6edf3serviceTb4b4b4.Te6edf3handleFromRadioTb4b4b4(
Te6edf3fromRadio Tb4b4b4{
Te6edf3queueStatus Tff7b72= Te6edf3queueStatus Tb4b4b4{
Te6edf3res Tff7b72= T79c0ff0
Te6edf3free Tff7b72= T79c0ff1T79c0ff6
Te6edf3meshPacketId Tff7b72= Te6edf3msgId
Tb4b4b4}
Tb4b4b4}
Tb4b4b4.Te6edf3toByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffsendAdminTb4b4b4(Te6edf3fromInTb4b4b4: Tffa657IntTb4b4b4, Te6edf3toInTb4b4b4: Tffa657IntTb4b4b4, Te6edf3reqIdTb4b4b4: Tffa657IntTb4b4b4, Te6edf3initFnTb4b4b4: Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3BuilderTb4b4b4.Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3p Tff7b72=
Te6edf3makeDataPacketTb4b4b4(
Te6edf3fromInTb4b4b4,
Te6edf3toInTb4b4b4,
Te6edf3MeshProtosTb4b4b4.Te6edf3DataTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3portnum Tff7b72= Te6edf3PortnumsTb4b4b4.Te6edf3PortNumTb4b4b4.Te6edf3ADMIN_APP
Te6edf3payload Tff7b72= Te6edf3AdminProtosTb4b4b4.Te6edf3AdminMessageTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3also Tb4b4b4{ Te6edf3initFnTb4b4b4(Tffa657itTb4b4b4) Tb4b4b4}Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toByteStringTb4b4b4(Tb4b4b4)
Te6edf3requestId Tff7b72= Te6edf3reqId
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3serviceTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3pTb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

T8b949e// / Send a fake ack packet back if the sender asked for want_ack
Tff7b72private Tff7b72fun Td2a8ffsendFakeAckTb4b4b4(Te6edf3prTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3ToRadioTb4b4b4) Tff7b72= Te6edf3serviceTb4b4b4.Te6edf3serviceScopeTb4b4b4.Te6edf3handledLaunch Tb4b4b4{
Te6edf3delayTb4b4b4(T79c0ff2T79c0ff0T79c0ff0T79c0ff0Tb4b4b4)
Te6edf3serviceTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3makeAckTb4b4b4(Te6edf3MY_NODE Tff7b72+ T79c0ff1Tb4b4b4, Te6edf3prTb4b4b4.Te6edf3packetTb4b4b4.Te6edf3fromTb4b4b4, Te6edf3prTb4b4b4.Te6edf3packetTb4b4b4.Te6edf3idTb4b4b4)Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffsendConfigResponseTb4b4b4(Te6edf3configIdTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3debugTb4b4b4(Ta5d6ff"Ta5d6ffSending mock config responseTa5d6ff"Tb4b4b4)

T8b949e// / Generate a fake node info entry
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72fun Td2a8ffmakeNodeInfoTb4b4b4(Te6edf3numInTb4b4b4: Tffa657IntTb4b4b4, Te6edf3latTb4b4b4: Tffa657DoubleTb4b4b4, Te6edf3lonTb4b4b4: Tffa657DoubleTb4b4b4) Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3FromRadioTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3nodeInfo Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3NodeInfoTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3num Tff7b72= Te6edf3numIn
Te6edf3user Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3UserTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3id Tff7b72= Te6edf3DataPacketTb4b4b4.Te6edf3nodeNumToDefaultIdTb4b4b4(Te6edf3numInTb4b4b4)
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffSim Ta5d6ff" Tff7b72+ Te6edf3IntegerTb4b4b4.Te6edf3toHexStringTb4b4b4(Te6edf3numTb4b4b4)
Te6edf3shortName Tff7b72= Te6edf3getInitialsTb4b4b4(Te6edf3longNameTb4b4b4)
Te6edf3hwModel Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3ANDROID_SIM
Tb4b4b4}
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Te6edf3position Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3PositionTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3latitudeI Tff7b72= Te6edf3PositionTb4b4b4.Te6edf3degITb4b4b4(Te6edf3latTb4b4b4)
Te6edf3longitudeI Tff7b72= Te6edf3PositionTb4b4b4.Te6edf3degITb4b4b4(Te6edf3lonTb4b4b4)
Te6edf3altitude Tff7b72= T79c0ff3T79c0ff5
Te6edf3time Tff7b72= Tb4b4b4(Te6edf3SystemTb4b4b4.Te6edf3currentTimeMillisTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Te6edf3precisionBits Tff7b72= Te6edf3RandomTb4b4b4.Te6edf3nextIntTb4b4b4(T79c0ff1T79c0ff0Tb4b4b4, T79c0ff1T79c0ff9Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4}

T8b949e// Simulated network data to feed to our app
Tff7b72val Te6edf3packets Tff7b72=
Te6edf3arrayOfTb4b4b4(
T8b949e// MyNodeInfo
Te6edf3MeshProtosTb4b4b4.Te6edf3FromRadioTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3myInfo Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3MyNodeInfoTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{ Te6edf3myNodeNum Tff7b72= Te6edf3MY_NODE Tb4b4b4}Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3MeshProtosTb4b4b4.Te6edf3FromRadioTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3metadata Tff7b72= Te6edf3deviceMetadata Tb4b4b4{
Te6edf3firmwareVersion Tff7b72= Ta5d6ff"Ta5d6ff9.9.9.abcdefgTa5d6ff"
Te6edf3hwModel Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3ANDROID_SIM
Tb4b4b4}
Tb4b4b4}Tb4b4b4,

T8b949e// Fake NodeDB
Te6edf3makeNodeInfoTb4b4b4(Te6edf3MY_NODETb4b4b4, T79c0ff3T79c0ff2.776665Tb4b4b4, Tff7b72-T79c0ff9T79c0ff6.796989Tb4b4b4)Tb4b4b4, T8b949e// dallas
Te6edf3makeNodeInfoTb4b4b4(Te6edf3MY_NODE Tff7b72+ T79c0ff1Tb4b4b4, T79c0ff3T79c0ff2.960758Tb4b4b4, Tff7b72-T79c0ff9T79c0ff6.733521Tb4b4b4)Tb4b4b4, T8b949e// richardson
Te6edf3MeshProtosTb4b4b4.Te6edf3FromRadioTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{ Te6edf3config Tff7b72= Te6edf3config Tb4b4b4{ Te6edf3lora Tff7b72= Te6edf3defaultLoRaConfig Tb4b4b4} Tb4b4b4}Tb4b4b4,
Te6edf3MeshProtosTb4b4b4.Te6edf3FromRadioTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{ Te6edf3channel Tff7b72= Te6edf3defaultChannel Tb4b4b4}Tb4b4b4,
Te6edf3MeshProtosTb4b4b4.Te6edf3FromRadioTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{ Te6edf3configCompleteId Tff7b72= Te6edf3configId Tb4b4b4}Tb4b4b4,

T8b949e// Done with config response, now pretend to receive some text messages

Te6edf3makeTextMessageTb4b4b4(Te6edf3MY_NODE Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4,
Te6edf3makeNeighborInfoTb4b4b4(Te6edf3MY_NODE Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4,
Te6edf3makePositionTb4b4b4(Te6edf3MY_NODE Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4,
Te6edf3makeTelemetryTb4b4b4(Te6edf3MY_NODE Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4,
Tb4b4b4)

Te6edf3packetsTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3p Tff7b72-Tff7b72> Te6edf3serviceTb4b4b4.Te6edf3handleFromRadioTb4b4b4(Te6edf3pTb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.2 - Generated in 0.11s